Method and system for a CPU-local storage mechanism

ABSTRACT

Described herein are systems and methods for implementing a processor-local (e.g., a CPU-local) storage mechanism. An exemplary system includes a plurality of processors executing an operating system, the operating system including a processor local storage mechanism, wherein each processor accesses data unique to the processor based on the processor local storage mechanism. Each of the plurality of processors of the system may have controlled access to the resource and each of the processors is dedicated to one of a plurality of tasks of an application. The application including the plurality of tasks may be replicated using the processor local storage mechanism, wherein each of the tasks of the replicated application includes an affinity to one of the plurality of processors.

BACKGROUND

Thread local storage is a computer programming method that supportsglobal/static memory data that is unique to a thread, or task. Datawithin a static or global variable is typically located in the samememory location when referred to by threads from the same process.However, since each thread has its own stack, variables on the stack arelocal to the threads and reside in different memory locations.Typically, methods for supporting thread-local storage in a high-levellanguage (e.g., C/C++) require tool chain support. In addition, thisconventional method involves the usage of the _thread storage classattribute.

For instance, a global variable is declared as thread-local storage inC/C++ code as, “_thread int errno”, wherein errno is used for storingthe error code related to functions from the Standard C library. The“errno” thread-local variable can be accessed in C/C++ code as:

if (errno == S_objLib_OBJ_TIMEOUT)   errno = S_eventLIB_TIMEOUT

Accordingly, it is common practice for code compilers that supportmulti-threaded applications to provide a separate instance of “errno”for each thread, in order to avoid different threads competing to reador update the value. Compilers often provide this facility in the formof extensions to the declaration syntax, such as “_thread” annotationson static variable declarations.

SUMMARY OF THE INVENTION

The present invention is related to systems and methods for implementinga processor-local (e.g., a CPU-local) storage mechanism. An exemplarysystem includes a plurality of processors executing an operating system,the operating system including a processor local storage mechanism,wherein each processor accesses data unique to the processor based onthe processor local storage mechanism. Each of the plurality ofprocessors of the system may have controlled access to the resource andeach of the processors may be dedicated to one of a plurality of tasksof an application. The application including the plurality of tasks maybe replicated using the processor local storage mechanism, wherein eachof the tasks of the replicated application includes an affinity to oneof the plurality of processors.

A further exemplary system includes a processor executing an operatingsystem and a plurality of instances of an application, wherein theoperating system including a processor local storage mechanism, whereineach instance of the application accesses data unique to each instancebased on the processor local storage mechanism. Each of the plurality ofinstances may have controlled access to the resource within the system.The application may also include a plurality of tasks replicated usingthe processor local storage mechanism, wherein each of the tasksincludes an affinity to one of the plurality of instances.

A further exemplary system includes a plurality of processors executinga set of instructions, wherein the set of instructions being operable toexecute a multi-processor operating system; define a processor storageclass attribute; create one of an application and an extension of theoperating system; and execute the one of the application and theextension within the operating system using the processor storage classattribute. Each of the plurality of processors may have controlledaccess to the resource and each of the processors may be dedicated toone of a plurality of task of an application. The application includingthe plurality of tasks may be replicated using the processor localstorage mechanism, wherein each of the tasks of the replicatedapplication includes an affinity to one of the plurality of processors.

A further exemplary system includes a processor and a set ofinstructions executing on the processor, wherein the set of instructionsbeing operable to execute a uniprocessor application; define a processorstorage class attribute; and execute a multi-instancing function on theuniprocessor application using the processor storage class attribute.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 shows an exemplary symmetric multiprocessing (“SMP”) system forimplementing a CPU-local storage method according to the exemplaryembodiments of the present invention.

FIG. 2A illustrates an exemplary method for implementing a CPU-localstorage mechanism for the SMP operating system according to theexemplary embodiments of the present invention.

FIG. 2B illustrates an exemplary method for implementing a CPU-localstorage mechanism for multi-instancing a uniprocessor applicationaccording to the exemplary embodiments of the present invention.

FIG. 3 shows an exemplary system for migrating an existing UPapplication to a multi-core processor platform executing the SMP systemaccording to the exemplary embodiments of the present invention.

DETAILED DESCRIPTION

The exemplary embodiments of the present invention may be furtherunderstood with reference to the following description and the appendeddrawings, wherein like elements are referred to with the same referencenumerals. The exemplary embodiments of the present invention describemethods and systems for implementing a CPU-local storage mechanism.

In software development, multi-core technology is the nexttransformative technology for the device software optimization (“DSO”)industry. Accordingly, software platforms may be enhanced with symmetricmultiprocessing (“SMP”) capabilities within the operating system,network stack, and development tools in order to provide an efficientpath for realizing the benefits of multi-core technology. An SMP systeminvolves a multiprocessor computer architecture wherein two or moreidentical processors may be connected to a single shared main memory.Furthermore, the SMP architecture may also apply to multi-coreprocessors, where each core may be treated as a separate processor. Inother words, a single instance of the operating system may use multipleprocessors in a single system. The SMP system may maintain the same keyreal-time operating systems (“RTOS”) characteristics of performance,small footprint, high reliability, and determinism as a uniprocessorsystem configuration.

Advantages of the SMP system include true concurrent execution of tasksand interrupts during multitasking, priority-based concurrent taskscheduler for managing the concurrent execution of tasks and automaticload balancing on different processors, mutual exclusion forsynchronization between tasks and interrupts received simultaneously ondifferent processors, processor affinity for assigning specific tasks orinterrupts to a specific processor, etc. Applications that use anapplication programming interface (“API”) defined for SMP may also havecompatibility with a uniprocessor system configuration. In addition,software platforms, such as VxWorks distributed by Wind River Systems,Inc. of Alameda, Calif., may provide SMP simulation capabilities for thedevelopment of SMP application without physical hardware. For instance,SMP simulators may be provided with all the standard uniprocessorVxWorks installations as an introduction to the SMP product.

It should be noted that while the exemplary embodiments are describedwith reference to an SMP operating system, those skilled in the art willunderstand that the functionality described herein may be transferred toother types of operating systems. Specifically, any other type ofoperating system that supports a multi-processor architecture ormulti-instancing of a single processor. It should also be noted that theterms “processor” and “CPU” are used interchangeably throughout thisdescription and should be understood to mean any type of computingdevice that is capable of executing instructions, for example, generalpurpose processors, embedded processors, digital signal processors(DSPs), application specific integrated circuits (ASICs), etc.

According to the exemplary embodiments of the present invention, theCPU-local storage (“CLS”) (mechanism?) may be described as a system ormethod that supports global/static data that is unique per-CPU. In otherwords, regardless of the number of threads, or tasks, that execute on aCPU, each thread that executes on any given CPU may utilize the sameinstance of a variable classified as CLS. As will be described infurther detail below, the CLS may utilize tool chain support and mayinvolve the usage of a cpu storage class attribute. For example, aglobal variable may be declared as CPU-local storage in C/C++, asfollows:

_cpu TASK_ID taskIdCurrent;

Accessing a CLS variable from C/C++ may involve reading/writing thevariable as with any other global/static variable. Such as, for example:

TASK_ID taskIdSelf (void) { return (taskIdCurrent); }

FIG. 1 shows an exemplary symmetric multiprocessing (“SMP”) system 100for implementing a CPU-local storage method according to the presentinvention. The exemplary SMP system 100 may include a CPU-local storage(“CLS”) mechanism 105. As noted above, the CLS mechanism 105 mayincrease the usability of operating system products within the SMPsystem 100. Specifically, the CLS mechanism 105 may allow for users(e.g., end customers, third parties, etc.) to easily and convenientlyextend the SMP system 100 by, for example, extending operating systemfunctionality, developing and implementing new applications to operateon the SMP operating system and facilitating the process ofmulti-instancing a uniprocessor (“UP”) application. The CLS mechanism105 will be described in further details below.

It is noted that throughout this description, the system 100 illustratedin FIG. 1 is referred to as “SMP system” or “SMP operating system.”Those skilled in the art will understand that an operating system isstored in a memory and is executed by a processor to act as an interfacebetween hardware and a user. An operating system is responsible for themanagement and coordination of activities and the sharing of thehardware resources. The operating system further acts as a host forapplications that are run on the hardware device. Thus, when referringto the “SMP system” or “SMP operating system,” it is intended to referto the standard definition of an operating system. Thus, when referringto the SMP operating system 100 it is intended to refer to an operatingsystem that is operating on the various hardware devices illustrated inFIG. 1, not to suggest that the hardware devices are part of theoperating system.

According to the exemplary embodiments of the present invention, the SMPsystem 100 may also include a computer architecture having a pluralityof identical processors 110, 120 and 130 connected to a shared resource,such as a main memory 150. The SMP system 100 may further include bus140, or a crossbar switch, for connecting the plurality of processors110-130 to the shared main memory 150. In addition, each of theprocessors 110-130 may be in communication with a scheduler 160. As willbe described below, the scheduler 160 may be a priority-based preemptivescheduler capable of managing concurrent executions of tasks, as well asperforming automatic load balancing of the processors 110-130. Those ofskill in the art will understand that the system of FIG. 1 isillustrating a conceptual system that is a combination of hardware andsoftware. For example, the processors 110, 120 and 130, the bus 140 andthe memory 150 may be hardware components, while the CLS mechanism 105and the scheduler 160 may be software components, e.g., lines ofsoftware code embodied in a computer readable storage medium that areexecuted by a processor. However, as described more fully below, this isnot a strict definition because it may be that a single component suchas a processor may be a combination of hardware components and softwarecode.

The processors 110-130 may be individual microprocessors that arerunning in parallel as part of a single computing device, may beseparate microprocessors that are part of separate computing devices,may be software processes acting as processors, or may be any othersimilar element capable of executing processes and requesting access toresources. That is, while the term processor is used herein to describethe entity that is attempting to gain access to a resource, thoseskilled in the art will understand that the entity is not limited to ahardware processor, but may include any number of execution threads thatmay request access to the resource. Furthermore, the exemplary SMPsystem 100 may utilize CPU affinity. In other words, the SMP system 100may have the ability to assign specific tasks and/or interrupts to anyone of the processor 110-130.

The SMP architecture illustrated in FIG. 1 may allow for a singleinstance of an operating system to use the multiple processors 110-130in the single SMP system 100. Furthermore, the SMP system 100 may allowfor multitasking with true concurrent execution of task and/orinterrupts, as well as concurrent task scheduling by the preemptivescheduler 160.

According to the exemplary embodiments of the present invention, the SMPsystem 100 may operate in accordance with exemplary methods 200 and 250described below and illustrated in FIGS. 2A and 2B, respectively.Current applications and/or extensions of the operating system may beprovided with a CPU-local storage mechanism, such as CLS 105. Themethods 200 and 250 provide two examples of operations that may becarried out using an exemplary CLS mechanism 105. For example, a usermay easily and conveniently extend the SMP operating system using theexemplary method 200. Furthermore, a user may utilize the exemplarymethod 250 to facilitate the multi-instancing of a uniprocessorapplication. It should be noted that the methods 200 and 250 will bedescribed with reference to the exemplary system 100 of FIG. 1. However,those of skill in the art will understand that this is only exemplaryand that the methods 200, 250 may be implemented within various othersystems, having various computer architectures, as well. That is, theremay be many other operations that may be carried out using the exemplaryCLS mechanism 105 and the operations described in methods 200 and 250are only exemplary.

FIG. 2A illustrates an exemplary method 200 for implementing a CPU-localstorage mechanism 105 for the SMP operating system 100 according to theexemplary embodiments of the present invention. As described above, theexemplary CLS mechanism 105 that is implemented as a programmingconstruct may support global and static data (e.g., variables) that isunique to a specific CPU (e.g., any one of the processors 110, 120 and130). Regardless of the number of threads that execute on the CPU, eachthread that executes on a particular CPU may utilize the same instanceof a variable classified as CPU-local storage (“CLS”).

It should be noted that the exemplary CPU-local storage mechanism mayinclude software development tools (e.g., such as Wind River Workbenchetc.) that may be used by the developer to create, modify, and compilesoftware program applications. The CPU-local storage mechanism maycomprise a software suite that includes any number of individualsoftware development programs, such as a compiler, a debugger, anoperating system configurator, a source code analyzer, a text editor,etc. These individual programs may either be run independently of arunning application or within a main development program. Furthermore,those skilled in the art will also understand that the above describedexemplary embodiments may be implemented in any number of manners,including, as a separate software module, as a combination of hardwareand software, etc. For example, the CPU-local storage mechanism may be aprogram containing lines of code stored in any type of computer-readablestorage medium that, when compiled, may be executed by a processor.

According to the exemplary method 200, a variable, such as one or more_cpu type variables, may be declared for a processor. Informationregarding the declaration of cpu type variables may be packaged by acompiler into an output object module in an executable and linkableformat “ELF” section named “.cls_vars”. Access to _cpu type variablesmay result in generated object code invoking an operating systemspecific primitive _cls_lookup( ). Accordingly, the _cls_lookup( )primitive may return the address of the specified CPU-local storagevariable using a CPU architecture-specific method.

For instance, on an instruction set architecture, such as the IA32architecture, the GS register may be used to store a base address of the“CPU-local storage area”, wherein the return value of _cls_lookup( ) maybe defined as the sum of the GS register and an offset. The offset maybe based on the specified _cpu type variable that is supplied as anargument. An exemplary implementation of the _cls_lookup( ) may appearas follows:

  void * _cls_lookup(void * offset)     {     /* caller must ensurecurrently executing task is safe from CPU migration */     unsigned intcpuIndex = sysCpuIndexGet ( );     return((void *)&(_cls_vars[cpuIndex] + offset));     }

According to the exemplary embodiments of the present invention, themethod 200 may allow for the exemplary programming construct CPU-localstorage mechanism for an operating system such as the SMP operatingsystem 100 illustrated in FIG. 1 to be used to extend the SMP operatingsystem 100 or create an application to be executed within the SMPoperating system 100 on a multi-processor architecture. In step 210, themethod 200 is executing a multi-processor operating system such as SMPoperating system 100. The exemplary CLS mechanism 105 described above isused to extend the SMP operating system 100.

In step 220, the method 200 defines, via a programming construct, a CPUstorage class attribute. For example, support of a “_cpu storage” classattribute and a cpu variable library may be added to the CLS mechanism105 as described in the examples above. Accordingly, these attributesand library may be added to pre-existing variable and structuredefinitions. In other words, method 200 may add the _cpu storage classattribute to the existing variable and structure definitions. Inaddition, during step 220, a compiler of the CLS mechanism 105 maypackage information regarding the declaration of variables, such as _cputype variables, into an output object module. For instance, the outputmodule may be within an ELF section named .cls_vars.

In step 230, the method 200 may create an application and/or anextension of the operating system. That is, the developer may desire toadd functionality to the SMP operating system 100 by adding a newfunction, task, etc. Similarly, the developer may desire to create a newapplication that will run in the multi-processor environment using theSMP operating system 100. Thus, in this step the new operating systemextension and/or application is created. As described above, currentmulti-processor operating environments do not allow such a new extensionand/or application to be simply inserted and executed in themulti-processor environment. However, as described above the CLSmechanism 105, e.g., as defined in step 220, provides for easy insertionof the new extension or application as described above by supportingglobal/static data that is unique for each processor.

Thus, in step 240, the method 200 may execute the application and/orextension within the multi-processor operating system using the CPUstorage class attribute. It should be noted that the method 200 mayaccess the correct element from the per-CPU structure array.Specifically, access to the variables (e.g., the _cpu type varibables)may result in the generated object code invoking an operatingsystem-specific primitive _cls_lookup( ). As noted above, the process ofmulti-instancing an application may involve gathering all of the globaland static variables into a per-CPU (e.g., a per-processor) structure.Accordingly, these global/static variables may be defined as CPU-localstorage variables.

Accordingly, the method 200 may return the address of the specifiedCPU-local storage variable based on the _cls_lookup( ). For example, areturn value of _cls_lookup( ) may be the sum of a GS resister and anoffset. This offset may be based on the specified _cpu type variablethat was supplied in step 220.

FIG. 2B illustrates an exemplary method 250 for implementing a CPU-localstorage mechanism 105 for multi-instancing a uniprocessor applicationaccording to the exemplary embodiments of the present invention. As willbe described below, the exemplary system 300 of FIG. 3 may implement themethod 250 described herein.

In step 260, the method 250 may execute a uniprocessor application. Forinstance, a user may migrate the uniprocessor application to amulti-core processor platform, such as the SMP system 100. The user maythen replicate an exemplary UP application any number of times (e.g., Ntimes) in order to dramatically increase and improve performance. Eachof the processors may be dedicated to a given instance of the replicatedUP application. The UP application may consist of several tasks, whereineach task includes CPU affinity. In other words, the replication of UPapplications may include replicating various tasks in the applications,wherein all of the tasks in the replicated application may have anaffinity to the same processor. For example, assume an exemplary UPapplication consists of 2 tasks, namely, taskA and taskB. If this UPapplication is to be replicated for a two-processor SMP system, thentaskA and taskB may both have an affinity to a first processor (e.g.,CPU0), while taskA′ and taskB′ may both have an affinity to a secondprocessor (e.g., CPU1). Given that the exemplary UP application mayalready be re-entrant (e.g., the application was already operatingcorrectly within a UP environment), the UP application may only need tobe made multi-instance safe in order to operate in the SMP system 100.

In step 270, the method 250 may define a CPU-local storage classattribute according to the exemplary embodiments of the presentinvention. As described above, the CLS mechanism 150 may be used to addthe _cpu storage class attribute to existing variable and structuredefinitions.

In step 280, the method 250 may multi-instance the uniprocessorapplication (e.g., execute a multi-instancing function on theapplication) using the CPU storage class attribute. The process ofmulti-instancing the UP application may involve gathering all global andstatic variables into a per-processor (e.g., a per-CPU) structure. Inother words, the global and static variables may be the CPU-localstorage variables defined in step 270.

FIG. 3 shows an exemplary system 300 for migrating an existing UPapplication 310 to a multi-core processor platform executing the SMPsystem 330 according to the exemplary embodiments of the presentinvention. The exemplary SMP system 330 may include a CPU-local storage(“CLS”) mechanism 305, as well as a plurality of processors, such asCPU1 301, CPU2 302, and CPU3 303. Furthermore, the UP application 310may include any number of instances (or tasks), such as instances 311,312, and 313, wherein each instance 311-313 may have a CPU-affinity. Inother words, each of the CPUs 301-303 may be dedicated to one of thegiven instances 311-313 of the replicated UP application 310.

As noted in method 250 of FIG. 2B, an exemplary application, such as theexisting UP application 310 may be replicated any number of time (e.g.,N times) in order to dramatically increase overall performance. Sincethe UP application 310 may presumably be operating properly in an UPenvironment, the application 310 only needs to be made multi-instancesafe in order to operate in the SPM system 330. Thus, the CLS mechanism305 may facilitate the process of multi-instancing the UP application,while providing an easy and convenient mechanism for the user to extendthe SMP system 330.

Those of skill in the art will understand that this code is merelyexemplary, and that other programming code, in both C and otherprogramming languages, may also be written to implement a CPU-localstorage mechanism according to the present invention.

Those skilled in the art will understand that the above describedexemplary embodiments may be implemented in any number of manners,including as a separate software module, as a combination of hardwareand software, etc. For example, the method 200 may be a programcontaining lines of code that, when compiled, may be executed by aprocessor.

It will be apparent to those skilled in the art that variousmodifications may be made in the present invention, without departingfrom the spirit or the scope of the invention. Thus, it is intended thatthe present invention cover modifications and variations of thisinvention provided they come within the scope of the appended claims andtheir equivalents.

What is claimed is:
 1. A system, comprising: a multi-core processorplatform including a plurality of processors, the multi-core processorplatform configured to: execute a single instance of an operating systemand a plurality of instances of a uniprocessor application, wherein eachinstance of the uniprocessor application is executed within the singleinstance of the operating system by a different one of the plurality ofprocessors, the single instance of the operating system including aprogramming construct configured to define a processor storage classattribute specific to each of the processors, the processor storageclass attributes configured to gather a global variable of theuniprocessor application into a per processor structure so that each ofthe plurality of instances of the uniprocessor application include a perprocessor global variable, wherein the programming construct is furtherconfigured to label tasks associated with each instance of theuniprocessor application with the processor storage class attributespecific to the corresponding one of the plurality of processors,wherein each instance of the uniprocessor application accesses only dataunique to the corresponding processor based on the processor storageclass attribute defined by the programming construct.
 2. The system ofclaim 1, wherein each of the plurality of processors has controlledaccess to a shared resource and each of the processors is dedicated toone of a plurality of tasks of the uniprocessor application.
 3. Thesystem of claim 2, wherein each instance of the uniprocessor applicationincluding the plurality of tasks is generated using the programmingconstruct.
 4. The system of claim 1, wherein the programming constructis further configured to update a source file maintaining variabledefinition data for one of the plurality of processors.
 5. The system ofclaim 1, wherein the programming construct is further configured togenerate object code invoking a lookup function based on an accessedelement from a processor structure array, performs the lookup function,and returns an address of a specified processor local storage variable.6. The system of claim 1, further including: a compiler packaginginformation for declaration of a plurality of variables into an outputobject module.
 7. The system of claim 6, wherein the output objectmodule is located within an executable and linkable format “ELF” sectionof one of the plurality of variables.
 8. The method of claim 1, whereinthe plurality of instances of the uniprocessor application are generatedbased on applying the storage class attributes to the uniprocessorapplication.
 9. A system, comprising: a multi-core processor platformincluding a plurality of processors, the multi-core processor platformconfigured to: execute a single instance of an operating system and aplurality of instances of an application, wherein each instance of theapplication is executed by a different one of the plurality ofprocessors, wherein the single instance of the operating system includesa programming construct configured to define a processor storage classattribute specific to each of the plurality of instances of theapplication, the processor storage class attributes configured to gathera global variable of the application into a per processor structure sothat each of the plurality of instances of the application include a perprocessor global variable, wherein the programming construct is furtherconfigured to label tasks associated with each instance of theapplication with the processor storage class attribute specific to thecorresponding one of the instances of the application, wherein eachinstance of the application only accesses data unique to each instanceof the application based on the processor storage class attributesdefined by the programming construct.
 10. The system of claim 9, whereineach of the plurality of instances has controlled access to a sharedresource.
 11. The system of claim 9, wherein the application includes aplurality of tasks generated using the programming construct, each ofthe tasks includes an affinity to one of the plurality of instances. 12.The system of claim 9, wherein the programming construct is furtherconfigured to update a source file maintaining variable definition datafor one of the plurality of instances.
 13. The system of claim 9,wherein the programming construct is further configured to generateobject code invoking a lookup function based on an accessed element froma processor structure array, performs the lookup function, and returnsan address of a specified processor local storage variable that isunique per instance of the application.
 14. The system of claim 9,further including: a compiler packaging information for declaration of aplurality of variables into an output object module.
 15. The system ofclaim 14, wherein the output object module is located within anexecutable and linkable format “ELF” section of one of the plurality ofvariables.
 16. A system, comprising: a plurality of processorsconfigured to perform operations comprising: execute a single instanceof an operating system; define a processor storage class attributespecific to each of the plurality of processors; generate a firstinstance of a uniprocessor application and a second instance of theuniprocessor application using the processor storage class attributes,wherein the processor storage class attributes are configured to gathera global variable of the uniprocessor application into a per processorstructure so that the first instance of the uniprocessor application andthe second instance of the uniprocessor application each include a perprocessor global variable; label tasks associated with the firstinstance of the uniprocessor application with the processor storageclass attribute specific to a first processor of the plurality ofprocessors; label tasks associated with the second instance of theuniprocessor application with the processor storage class attributespecific to a second processor of the plurality of processors; andexecute the first instance of the uniprocessor application and thesecond instance of the uniprocessor application within the singleinstance of the operating system, wherein the first instance of theuniprocessor application is executed by the first processor and thesecond instance of the uniprocessor application is executed by thesecond processor based on the corresponding processor storage classattributes.
 17. The system of claim 16, wherein each of the plurality ofprocessors has controlled access to a shared resource.
 18. The system ofclaim 17, wherein the first instance of the uniprocessor application andthe second instance of the uniprocessor application are generated usinga programming construct.
 19. The system of claim 16, the operationsfurther comprising: update a source file maintaining variable definitiondata for one of the plurality of processors.
 20. A system, comprising: amulti-core processor platform including a plurality of processorsconfigured to perform operations comprising: execute a single instanceof an operating system; execute a uniprocessor application within thesingle instance of the operating system; define a processor storageclass attribute specific to each of the plurality of processors, theprocessor storage class attributes to be utilized by a multi instancingfunction; and execute the multi-instancing function on the uniprocessorapplication to generate a plurality of instances of the uniprocessorapplication, each of the plurality of instances of the uniprocessorapplication configured to be executed by a different one of theplurality of processors, wherein executing the multi instancing functionincludes utilizing the processor storage class attributes to gather aglobal variable of the uniprocessor application into a per processorstructure so that each of the plurality of instances of the uniprocessorapplication include a per processor global variable unique to thecorresponding processor based on the processor storage class attributes.